<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 使用 js 实现有序数组原地去重
	{
		/**
		 * 对有序数组进行去重（原地修改），移除连续的重复元素
		 * @param {Array} arr - 需要去重的有序数组（要求重复元素连续出现）
		 * @returns {Array} 原地修改后的去重数组
		 */
		function orderDeduplicate(arr){
			// 从后向前遍历数组，避免splice导致索引变化问题
			for(let i = arr.length -1;i >= 0;i--){
				const now = arr[i]
				const pre = i > 0 ? arr[i - 1] : null
				// 当前元素与前一个相同则删除当前元素
				if (pre && pre === now){
					arr.splice(i,1)
				}
			}
			return arr
		}
		let arr1 = [0,1,1,2,2,2,3,3,3,4]
		console.log(orderDeduplicate(arr1))
	}
	{
		/**
		 * 使用双指针技巧对有序数组进行高效去重（原地修改）
		 * @param {Array} arr - 需要去重的有序数组（要求重复元素连续出现）
		 * @returns {Array} 原地修改后的去重数组
		 */
		function orderDeduplicate(arr){
			// 慢指针指向最新非重复元素的位置
			let slow = 0
			// 快指针遍历整个数组
			for(let fast = 1;fast < arr.length;fast++){
				// 发现新元素时更新慢指针位置并赋值
				if (arr[slow] !== arr[fast]){
					slow++
					arr[slow] = arr[fast]
				}
			}
			// 截断数组保留有效部分
			arr.length = slow + 1
			return arr
		}
		let arr1 = [0,1,1,2,2,2,3,3,3,4]
		console.log(orderDeduplicate(arr1))
	}

</script>
</html>